package com.cskaoyan._03memory;

/**
 * @description:
 * @author: 景天
 * @date: 2023/2/1 9:59
 **/
/*
通过数组的动态初始化内存分配的过程--->引用数据类型?


数组的基本操作:
    直接打印: 打印的是该对象的一个地址值
    获取数组长度
        数组名.length
    访问数组元素
        通过下标,index  数组名[index]
    修改数组元素
        通过下标,index  数组名[index] = newValue
 */
public class Demo3 {
    public static void main(String[] args) {
        int[] arr = new int[3];
        /*
            = 赋值符号, 把右边的赋值给左边
            new int[3]
            new 在堆上开辟空间,创建对象

            = 左边是一个局部变量, 名字arr, 数据类型是int数组类型
            在这里赋值表示的含义是
            把在堆上创建的数组对象的地址赋值给了左边, arr

            左边的称之为引用, 右边的称之为对象

            引用数据类型分为2个部分: 引用  +  对象
            引用里存的是对象的地址值

            注意:
                没有办法直接访问对象, 只能通过引用去间接的访问对象
            引用与对象的关系:
                举例: 电视与遥控器的关系
                     遥控器就是引用  电视就是对象
            注意:
                引用数据类型的本质 : 指的是对象
         */

        // 直接打印基本数据类型与引用数据类型
        int a = 1;
        System.out.println(a);

        System.out.println(arr);
        // [I@1b6d3586
        // [:一维数组
        // I :int
        // 1b6d3586:十六进制数,代表地址值


        //     获取数组长度
        //        数组名.length
        System.out.println("arr.length = " + arr.length);

        //    访问数组元素
        //        通过下标,index  数组名[index]
        System.out.println("arr[0] = " + arr[0]);
        //    修改数组元素
        //        通过下标,index  数组名[index] = newValue

        arr[0] = 1;
        arr[1] = 2;
        arr[2] = 3;

        // 长度为0的数组 []
        int[] arr2 = new int[0];
        System.out.println(arr2.length);


    }
}
